ANT Task

Behavioral Test

To assess participants’ executive functions, we employed the Attentional Network Task (ANT; Fan et al., 2002; 2009), a paradigm designed to evaluate attentional focus capacity. In a sequence of trials, participants were instructed to promptly indicate the direction (left or right) of a target arrow presented on a computer screen. The target arrow was flanked by additional arrows that could either all align in the same direction as the target (congruent condition) or diverge in the opposite direction (incongruent condition). Furthermore, in certain trials, advance cues provided information about the timing and/or location of the impending target.

Participants underwent this task on four occasions: prior to entering the scanner (Run “1_out”), within the scanner (Run “2_in”), inside the scanner with the added noise from an EPI sequence (Run “3_in_noise”), and outside the scanner (Run “4_out”). Evaluations outside the scanner were conducted in a soundproofed room, with participants seated before a computer screen displaying the stimuli. Within the scanner, stimuli were visible through a mirror mounted on the head antenna, with projections onto an LCD screen positioned at the rear of the scanner.

Refs:

Fan, Jin, Bruce D. McCandliss, Tobias Sommer, Amir Raz, and Michael I. Posner. 2002. “Testing the Efficiency and Independence of Attentional Networks.” J Cogn Neurosci 14 (3): 340–47. https://doi.org/10.1162/089892902317361886.

Fan, Jin, Xiaosi Gu, Kevin G. Guise, Xun Liu, John Fossella, Hongbin Wang, and Michael I. Posner. 2009. “Testing the Behavioral Interaction and Integration of Attentional Networks.” Brain and Cognition 70 (2): 209–20. https://doi.org/10.1016/j.bandc.2009.02.002.

Individual participants’ global performance (hit rates and average reaction-times)

Participants labeled 1 to 21 belong to the control group (no field), participants above 22 (included) belong to the experimental group (exposed to 11.7T).

Proportion of errors and slow responses to be removed for the analyses of reaction-times:

## [1] "Excluding 582 data points out of 11232 ( 5.2 %) (errors or slow responses)"

plotting only Reaction-Times

## 
##  Welch Two Sample t-test
## 
## data:  individualRTs$median_rt by individualRTs$group
## t = 0.8, df = 37, p-value = 0.4
## alternative hypothesis: true difference in means between group 0T and group 11.7T is not equal to 0
## 95 percent confidence interval:
##  -25.8  61.7
## sample estimates:
##    mean in group 0T mean in group 11.7T 
##                 538                 520

plotting only hit rates (correct responses)

## 
##  Welch Two Sample t-test
## 
## data:  perf$prop_correct by perf$group
## t = 0.6, df = 33, p-value = 0.6
## alternative hypothesis: true difference in means between group 0T and group 11.7T is not equal to 0
## 95 percent confidence interval:
##  -0.0147  0.0258
## sample estimates:
##    mean in group 0T mean in group 11.7T 
##               0.957               0.951

Performance of each group (group 1 = 0T, group2 = 11.7T)

print(psych::describeBy(perf, group="group"), digits=5)
## 
##  Descriptive statistics by group 
## group: 1
##              vars  n   mean     sd median trimmed   mad   min    max   range
## subject_id      1 20 10.500 5.9161 10.500   10.50 7.413 1.000 20.000 19.0000
## group           2 20  1.000 0.0000  1.000    1.00 0.000 1.000  1.000  0.0000
## prop_correct    3 20  0.957 0.0276  0.969    0.96 0.018 0.899  0.993  0.0938
##                skew kurtosis      se
## subject_id    0.000   -1.381 1.32288
## group           NaN      NaN 0.00000
## prop_correct -0.807   -0.726 0.00617
## ------------------------------------------------------------ 
## group: 2
##              vars  n   mean     sd median trimmed    mad    min    max  range
## subject_id      1 18 29.889 5.7690 29.500  29.875 7.4130 21.000 39.000 18.000
## group           2 18  2.000 0.0000  2.000   2.000 0.0000  2.000  2.000  0.000
## prop_correct    3 18  0.951 0.0333  0.955   0.954 0.0257  0.872  0.997  0.125
##                 skew kurtosis      se
## subject_id    0.0523   -1.461 1.35976
## group            NaN      NaN 0.00000
## prop_correct -0.7034   -0.038 0.00784

Run effect on reaction times

How do reaction time evolve from run 1 to 4 ? We expect that participants may get faster with time as they are more and more trained. The main question is: is the 11.7T group going to be slowed down than the 0T group when they are inside the scanner (and maybe also after) ?

Remark: because the stimulation conditions are not exactly the same in and out of the scanner, we do not expect the RTs to be the same in run2 & 3 than in run 1 & 4 (after removing the training effect).

##          run group  N mean   sd   se   ci
## 1      1_out    0T 20  545 82.7 18.5 38.7
## 2      1_out 11.7T 19  527 96.5 22.1 46.5
## 3       2_in    0T 20  575 78.2 17.5 36.6
## 4       2_in 11.7T 19  554 64.0 14.7 30.8
## 5 3_in_noise    0T 20  559 76.6 17.1 35.8
## 6 3_in_noise 11.7T 19  550 68.5 15.7 33.0
## 7      4_out    0T 20  519 65.3 14.6 30.5
## 8      4_out 11.7T 19  510 69.5 15.9 33.5

Flanker congruency effet (inhibition function)

The participants must classify the direction of the central arrow. The neighboring arrows can point toward the same direction (“congruent” condition), or the opposite direction (“incongruent” condition). The difference in performance between the incongruent and the congruent conditions (the “flanker cost”) measures how well the participant can “focus” his/her attention on the central arrow, inhibiting the influence of the irrelevant flanking arrows.

runeffect <- allc %>% 
  group_by(subject_id, run, group, flanker_congruency) %>%  
  summarize(mean_rt = mean(reaction_time, na.rm=TRUE))
## `summarise()` has grouped output by 'subject_id', 'run', 'group'. You can
## override using the `.groups` argument.
runs <- summarySE(runeffect, measurevar="mean_rt", groupvars=c("run", "group", "flanker_congruency"))

pd <- position_dodge(0.001) 
ggplot(runs, aes(x=run, y=mean, color= flanker_congruency)) + 
      geom_point(position=pd) +
      geom_line(aes(group = flanker_congruency), position=pd) + 
      geom_errorbar(aes(ymin=mean-se, ymax=mean+se, color=flanker_congruency), width=.1, position=pd) +
      facet_wrap(~group) + ylim(350, 750) + ylab("Reaction-times (ms)")

Analysis of Variance GroupRunFlanker_congruency

rt_mod <- aov_car(mean_rt ~ group + Error(subject_id/flanker_congruency * run), data=runeffect)
## Contrasts set to contr.sum for the following variables: group
knitr::kable(nice(rt_mod))
Effect df MSE F ges p.value
group 1, 37 43570.87 0.33 .007 .567
flanker_congruency 1, 37 4854.37 266.18 *** .392 <.001
group:flanker_congruency 1, 37 4854.37 0.12 <.001 .736
run 2.21, 81.64 2006.16 27.89 *** .058 <.001
group:run 2.21, 81.64 2006.16 0.40 <.001 .690
flanker_congruency:run 2.55, 94.21 488.73 3.01 * .002 .042
group:flanker_congruency:run 2.55, 94.21 488.73 0.61 <.001 .581
require(emmeans)
## Loading required package: emmeans

focus on the flanker effect

The flanker effect is the difference between inconguent and congruent conditions.

runs2 <- reshape(runs, idvar=c("run", "group"), timevar="flanker_congruency", direction = "wide")

runs2$cost  <- runs2$mean.incong - runs2$mean.cong

pd <- position_dodge(0.1) 
ggplot(runs2, aes(x=run, y=cost, colour = group), show.legend = FALSE) +  
  geom_point(position=pd) + 
  geom_line(aes(group=group), position=pd) +
  geom_errorbar(aes(ymin=cost-se.incong, ymax=cost+se.incong), width=.1, position=pd) + 
  ylim(0, 250) + 
  ylab("Flanker cost (ms)")

Stabilometry

Method: Before and after participants entered the scanner, their static balance was assessed. They stepped for 10s (TODO: Check duration), first with their eyes open, then with eyes closed, on a plateform (AbilyCareTODO: insert REF) that computed a stability score (ranging from 0 to 99).

Result: Whether the stability test was taken with eyes opened or with eyes closed, all participants from both groups stayed in the normal stability range (90-99). Moreover, there was no significant nor sizeable effect of exposure to the scanner, nor any difference between the control (0T) and the experimental (11.7T) groups (see below for average groups scores and the relevant t-tests).

individual data

Test conditions (O1, O2, C1, C2):

  • O = Eyes Opened
  • C = Eyes Closed
  • 1 = before entering the scanner
  • 2 = after exisiting the scanner

The score represents the probability of belonging to a “normal” group of people without balance issues.

According to an AbilyCare company internal test, a group of people with balance issues had a average score of 40.

I selected 50-90 on the y scale. No participant was below 90.

ggplot(equill, aes(x=test, y=score, color=group, fill=group)) + geom_col() + facet_wrap(~subject_id) + coord_cartesian(ylim = c(50, 100))

descriptive stats

summary(equilibre)
##    subject_id     group          O1             C1             O2      
##  Min.   : 1.0   0T   :20   Min.   :94.0   Min.   :95.0   Min.   :91.0  
##  1st Qu.:10.8   11.7T:20   1st Qu.:99.0   1st Qu.:99.0   1st Qu.:99.0  
##  Median :21.5              Median :99.0   Median :99.0   Median :99.0  
##  Mean   :21.2              Mean   :98.8   Mean   :98.8   Mean   :98.7  
##  3rd Qu.:31.2              3rd Qu.:99.0   3rd Qu.:99.0   3rd Qu.:99.0  
##  Max.   :43.0              Max.   :99.0   Max.   :99.0   Max.   :99.0  
##        C2      
##  Min.   :94.0  
##  1st Qu.:98.8  
##  Median :99.0  
##  Mean   :98.5  
##  3rd Qu.:99.0  
##  Max.   :99.0

Analysis of Variance Group * Condition (O1,O2,C1,C2)

## `geom_line()`: Each group consists of only one observation.
## ℹ Do you need to adjust the group aesthetic?

## Contrasts set to contr.sum for the following variables: group
Effect df MSE F ges p.value
group 1, 38 1.51 1.66 .014 .206
test 2.38, 90.53 1.26 0.91 .016 .422
group:test 2.38, 90.53 1.26 0.55 .010 .610

Physiological Variables

Fréquence Cardiaque (FC)

fc = bind_cols(select(physio, c("Rang", "group")), select(physio, contains("FC")))
print(fc, n=100)
## # A tibble: 41 × 11
##     Rang group `FC 1` `FC 2` `FC 3` `FC 4` `FC 5` `FC 6` `FC 7` `FC 8` `FC 9`
##    <dbl> <chr>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>
##  1     1 A         84     63     61     63     64     80     64     NA     87
##  2     2 A         67     68     66     59     63     61     64     NA     70
##  3     3 A         87     72     64     63     61     60     63     NA     75
##  4     4 A         65     67     61     57     74     65     71     NA     64
##  5     5 A         65     54     54     56     60     62     67     NA     68
##  6     6 A         79     76     75     71     76     72     77     NA     85
##  7     7 A         92     79     78     76     78     91     73     NA     88
##  8     8 A         76     80     69     66     67     73     58     NA     74
##  9     9 A         82     72     74     70     72     66     71     NA     87
## 10    10 A         56     83     74     62     61     55     64     NA     57
## 11    11 A         65     63     63     59     63     69     70     NA     71
## 12    12 A         74     71     69     58     54     57     52     NA     66
## 13    13 A         65     62     65     64     65     64     61     NA     62
## 14    14 A         61     54     56     52     65     56     54     NA     58
## 15    15 A         58     68     58     57     54     53     NA     NA     60
## 16    16 A         69     61     62     62     61     62     66     NA     73
## 17    17 A         94     NA     NA     NA     NA     NA     NA     NA     NA
## 18    18 A         62     66     62     63     71     66     74     NA     61
## 19    19 A         69     69     75     67     65     65     65     NA     68
## 20    20 A         51     52     56     55     69     52     57     NA     54
## 21    21 A         78     60     56     52     52     56     51     NA     80
## 22    22 B         91     69     75     65     59     64     65     60     80
## 23    23 B         57     50     52     56     55     51     48     58     60
## 24    24 B         68     58     61     51     49     56     52     NA     53
## 25    25 B         42     45     47     45     45     45     54     54     44
## 26    26 B         65     55     54     49     52     49     50     69     65
## 27    27 B        116     67     77     62     65     83     88     NA     79
## 28    28 B         46     44     47     52     55     62     51     NA     53
## 29    29 B         72     85     90     75     76     74     83     NA     78
## 30    30 B         58     57     50     NA     NA     NA     53     NA     47
## 31    31 B         95     93    105     78    101     95     NA     NA     79
## 32    32 B         56     60     63     53     56     62     68     NA     54
## 33    33 B         67     63     62     62     58     81     70     NA     71
## 34    34 B         51     55     58     59     56     55     65     NA     57
## 35    35 B         70     59     66     67     69     73     74     NA     69
## 36    36 B         85     83     79     71     79     85     83     NA     76
## 37    37 B         74    105     71     68     65     70     71     NA     76
## 38    38 B         61     70     52     41     40     48     48     NA     84
## 39    41 B         56     55     67     51     50     49     55     NA     54
## 40    42 B         51     43     43     43     48     53     65     NA     70
## 41    43 B        112     62     59     53     54     50     58     NA     57
fcl = pivot_longer(fc, -(1:2))
ggplot(fcl, aes(x=name, y=value, group=Rang, color=group)) + geom_point() + geom_line(aes(group=Rang)) +geom_text(aes(label=Rang, hjust=2), position=position_dodge())
## Warning: Width not defined
## ℹ Set with `position_dodge(width = ...)`
## Warning: Removed 49 rows containing missing values (`geom_point()`).
## Warning: Removed 8 rows containing missing values (`geom_line()`).
## Warning: Removed 49 rows containing missing values (`geom_text()`).

Taux de saturation en oxygène (SpO2)

spo2 = bind_cols(select(physio, c("Rang", "group")), select(physio, contains("SpO2")))
print(spo2, n=100)
## # A tibble: 41 × 11
##     Rang group `SpO2 1` `SpO2 2` `SpO2 3` `SpO2 4` `SpO2 5` `SpO2 6` `SpO2 7`
##    <dbl> <chr>    <dbl>    <dbl>    <dbl>    <dbl>    <dbl>    <dbl>    <dbl>
##  1     1 A           99       99       97       96       99      100      100
##  2     2 A           97       94       93       97       98       98       98
##  3     3 A           98       99       99       98       94       99       94
##  4     4 A           97       99       99       98      100      100       99
##  5     5 A          100      100      100      100       99      100      100
##  6     6 A           99      100      100      100       99       99       99
##  7     7 A           99       98       99       98       98       97       99
##  8     8 A           98       97       97       96       97       98       97
##  9     9 A           97       97       98       96      100      100      100
## 10    10 A           97      100      100      100       99       99       99
## 11    11 A           97       96       95       96       96       98       98
## 12    12 A           98       99       98       97       99       99       99
## 13    13 A           99       94       94       92       98       95       95
## 14    14 A           97       99       97       96       96       96       98
## 15    15 A           99       91       93       98       NA       NA       NA
## 16    16 A           98       99      100       99       99       99       97
## 17    17 A           99       NA       NA       NA       NA       NA       NA
## 18    18 A           98       94       98       98       94       97      100
## 19    19 A          100      100      100      100      100      100      100
## 20    20 A           96       98       98       96       97       98       98
## 21    21 A           98       93       94       94       94       92       89
## 22    22 B           99       93       94       92       93       97       93
## 23    23 B           99       95       91       94       90       93       96
## 24    24 B          100      100      100      100      100      100      100
## 25    25 B           96       98       96       95       93       98       96
## 26    26 B           98       98       95       96       96       94       91
## 27    27 B           97       96       95       97       94       97       93
## 28    28 B           97       95       92       90       94       97       98
## 29    29 B          100      100      100       95      100      100      100
## 30    30 B           98       91       84       NA       NA       NA       93
## 31    31 B           95       97       98       96       99       97       NA
## 32    32 B           96      100       99       98       99      100      100
## 33    33 B           97       97       96       99       98       99       99
## 34    34 B           98       94       93       94       80       92       92
## 35    35 B           98       99      100       98       99      100       99
## 36    36 B           98       99      100       97       96       94       95
## 37    37 B           99      100      100       99      100       99       98
## 38    38 B           97       92       83       88       96       97       98
## 39    41 B          100      100      100      100      100       96       98
## 40    42 B           99       91       94       94       90       94       99
## 41    43 B           98       99       98       98       98       97       98
## # ℹ 2 more variables: `SpO2 8` <dbl>, `SpO2 9` <dbl>
spo2l = pivot_longer(spo2, -(1:2))
ggplot(spo2l, aes(x=name, y=value, group=Rang, color=group)) + geom_point() + geom_line(aes(group=Rang)) +geom_text(aes(label=Rang, hjust=2), position=position_dodge())
## Warning: Width not defined
## ℹ Set with `position_dodge(width = ...)`
## Warning: Removed 51 rows containing missing values (`geom_point()`).
## Warning: Removed 8 rows containing missing values (`geom_line()`).
## Warning: Removed 51 rows containing missing values (`geom_text()`).

Pression artérielle systolique (PAS)

pas = bind_cols(select(physio, c("Rang", "group")), select(physio, contains("PAS")))
print(pas, n=100)
## # A tibble: 41 × 11
##     Rang group `PAS 1` `PAS 2` `PAS 3` `PAS 4` `PAS 5` `PAS 6` `PAS 7` `PAS 8`
##    <dbl> <chr>   <dbl>   <dbl>   <dbl>   <dbl>   <dbl>   <dbl>   <dbl>   <dbl>
##  1     1 A         127     109     109     107     114     122     130      NA
##  2     2 A         124     139     140     121     119     128     126      NA
##  3     3 A         141     112     130     119     120     126     132      NA
##  4     4 A         101     103     102      99      99      99     100      NA
##  5     5 A          93     102     100     102     102      98      96      NA
##  6     6 A         108     113     113     110     111     108     109      NA
##  7     7 A         115     109     110     107     104     105     105      NA
##  8     8 A         117     100     108     110     103     105     106      NA
##  9     9 A         116     111     114     114     118     116     113      NA
## 10    10 A         112     112     120     121     123     116     132      NA
## 11    11 A         128     102     114     100     106     118     110      NA
## 12    12 A          93     105     109      94     104      99     107      NA
## 13    13 A         112     113     116     117     115      NA     111      NA
## 14    14 A         111     119     114     104     107     111     114      NA
## 15    15 A         116     132      99     125     127     122     129      NA
## 16    16 A         120     128     108     108     114     114     121      NA
## 17    17 A         115      NA      NA      NA      NA      NA      NA      NA
## 18    18 A         105     103     111     108     103      98     102      NA
## 19    19 A         109     112     123     109     109     111     107      NA
## 20    20 A         110     111     137     115     116     105     122      NA
## 21    21 A         104     105     107     103     108     107     109      NA
## 22    22 B         124     121     130     124     116     124     122     134
## 23    23 B         128     123     135     135     114     114     131     122
## 24    24 B         113     121     124     121     119     119     124      NA
## 25    25 B         121     123     115     122     128     129     112     129
## 26    26 B         129     108     117     108     108     110     109     111
## 27    27 B         126     104     113      96     100      99     107      NA
## 28    28 B         132     119     128     121     117     122     124      NA
## 29    29 B          96     103     106      93     104      95     100      NA
## 30    30 B         138     125     124     127     130     114     120      NA
## 31    31 B          95      90     108     100     102     109      NA      NA
## 32    32 B         132     126     125     125     125     121     126      NA
## 33    33 B         102     101     109     114     108     115     114      NA
## 34    34 B         106     103     100     102      99     109     110      NA
## 35    35 B         132     130     124     113     120     118     116      NA
## 36    36 B         109      96      99      91      90      93      88      NA
## 37    37 B          99     111     118     102     106     105      98      NA
## 38    38 B         104     113     122     114     111     106     108      NA
## 39    41 B         103     105     110     110      93     102     104      NA
## 40    42 B         110     106     102      94     104     107     109      NA
## 41    43 B          71     117     121     119     121     121     117      NA
## # ℹ 1 more variable: `PAS 9` <dbl>
pasl = pivot_longer(pas, -(1:2))
ggplot(pasl, aes(x=name, y=value, group=Rang, color=group)) + geom_point() + geom_line(aes(group=Rang)) +geom_text(aes(label=Rang, hjust=2), position=position_dodge())
## Warning: Width not defined
## ℹ Set with `position_dodge(width = ...)`
## Warning: Removed 46 rows containing missing values (`geom_point()`).
## Warning: Removed 8 rows containing missing values (`geom_line()`).
## Warning: Removed 46 rows containing missing values (`geom_text()`).

Pression Artérielle Dystolique (PAD)

pad = bind_cols(select(physio, c("Rang", "group")), select(physio, contains("PAD")))
print(pad, n=100)
## # A tibble: 41 × 11
##     Rang group `PAD 1` `PAD 2` `PAD 3` `PAD 4` `PAD 5` `PAD 6` `PAD 7` `PAD 8`
##    <dbl> <chr>   <dbl>   <dbl>   <dbl>   <dbl>   <dbl>   <dbl>   <dbl>   <dbl>
##  1     1 A          58      54      59      60      58      63      60      NA
##  2     2 A          62      61      54      65      59      59      53      NA
##  3     3 A          81      79      62      56      63      68      64      NA
##  4     4 A          60      67      62      61      58      59      57      NA
##  5     5 A          53      48      52      55      51      52      58      NA
##  6     6 A          77      74      70      70      67      76      75      NA
##  7     7 A          71      70      69      69      63      63      66      NA
##  8     8 A          70      70      70      68      67      61      64      NA
##  9     9 A          73      67      70      70      71      62      65      NA
## 10    10 A          69      65      60      59      54      45      50      NA
## 11    11 A          81      62      68      65      70      67      66      NA
## 12    12 A          62      71      67      66      66      52      69      NA
## 13    13 A          65      71      76      64      68      NA      67      NA
## 14    14 A          62      61      58      53      54      57      59      NA
## 15    15 A          83      71      77      61      57      64      64      NA
## 16    16 A          72      66      72      72      66      72      72      NA
## 17    17 A          56      NA      NA      NA      NA      NA      NA      NA
## 18    18 A          65      67      73      67      66      61      66      NA
## 19    19 A          70      73      76      71      69      68      72      NA
## 20    20 A          67      79      59      61      64      52      53      NA
## 21    21 A          62      69      65      65      63      69      78      NA
## 22    22 B          76      55      70      66      81      66      72      73
## 23    23 B          88      55      54      54      62      62      70      58
## 24    24 B          63      71      83      73      90      81      87      NA
## 25    25 B          76      70      73      75      72      86      77      82
## 26    26 B          79      77      69      66      58      67      60      67
## 27    27 B          70      61      54      59      57      59      57      NA
## 28    28 B          66      51      60      47      48      62      57      NA
## 29    29 B          65      76      59      63      72      70      74      NA
## 30    30 B          83      61      57      61      58      65      58      NA
## 31    31 B          63      57       6      56      99      70      NA      NA
## 32    32 B          78      64      63      63      57      57      56      NA
## 33    33 B          56      60      61      62      62      67      72      NA
## 34    34 B          54      65      52      48      54      57      53      NA
## 35    35 B          68      60      74      51      63      48      76      NA
## 36    36 B          65      55      66      48      51      61      54      NA
## 37    37 B          59      59      59      56      60      63      54      NA
## 38    38 B          76      77      73      58      62      59      66      NA
## 39    41 B          68      67      73      73      62      63      68      NA
## 40    42 B          72      50      54      60      54      64      62      NA
## 41    43 B          65      60      62      57      53      56      68      NA
## # ℹ 1 more variable: `PAD 9` <dbl>
padl = pivot_longer(pad, -(1:2))
ggplot(padl, aes(x=name, y=value, group=Rang, color=group)) + geom_point() + geom_line(aes(group=Rang)) +geom_text(aes(label=Rang, hjust=2), position=position_dodge())
## Warning: Width not defined
## ℹ Set with `position_dodge(width = ...)`
## Warning: Removed 46 rows containing missing values (`geom_point()`).
## Warning: Removed 8 rows containing missing values (`geom_line()`).
## Warning: Removed 46 rows containing missing values (`geom_text()`).

Température

temp = bind_cols(select(physio, c("Rang", "group")), select(physio, contains("Temp")))
print(temp, n=100)
## # A tibble: 41 × 4
##     Rang group `Temp 1` `Temp 2`
##    <dbl> <chr>    <dbl>    <dbl>
##  1     1 A          364      367
##  2     2 A           37      375
##  3     3 A          364      367
##  4     4 A          363      375
##  5     5 A          368      376
##  6     6 A          362      365
##  7     7 A           36      359
##  8     8 A          369      366
##  9     9 A          364      369
## 10    10 A          378      376
## 11    11 A           36      363
## 12    12 A          361       36
## 13    13 A          366      363
## 14    14 A          368      369
## 15    15 A          361      364
## 16    16 A          375      363
## 17    17 A          377       NA
## 18    18 A          372      369
## 19    19 A          367       37
## 20    20 A          356      363
## 21    21 A          363      367
## 22    22 B          372      367
## 23    23 B          367      368
## 24    24 B          366      367
## 25    25 B          362      364
## 26    26 B          367      361
## 27    27 B           37       NA
## 28    28 B           37      366
## 29    29 B          368      366
## 30    30 B          359      358
## 31    31 B          361      369
## 32    32 B          371       37
## 33    33 B          376      377
## 34    34 B          369      372
## 35    35 B          366      367
## 36    36 B          365      364
## 37    37 B          372      366
## 38    38 B          352      361
## 39    41 B          364      362
## 40    42 B          365      364
## 41    43 B          365      366
templ = pivot_longer(temp, -(1:2))
ggplot(templ, aes(x=name, y=value, group=Rang, color=group)) + geom_point() + geom_line(aes(group=Rang)) +geom_text(aes(label=Rang, hjust=2), position=position_dodge())
## Warning: Width not defined
## ℹ Set with `position_dodge(width = ...)`
## Warning: Removed 2 rows containing missing values (`geom_point()`).
## Warning: Removed 2 rows containing missing values (`geom_line()`).
## Warning: Removed 2 rows containing missing values (`geom_text()`).